package com.tanhua.dubbo.api;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tanhua.dubbo.mappers.QuestionnaireReportMapper;
import com.tanhua.model.domain.QuestionnaireReport;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

@DubboService
public class QuestionnaireReportApiImpl implements QuestionnaireReportApi {

    @Autowired
    private QuestionnaireReportMapper questionnaireReportMapper;

    @Override
    public Long insertOrUpdate(QuestionnaireReport report) {
        LambdaQueryWrapper<QuestionnaireReport> lqw = new LambdaQueryWrapper<>();
        Long userId = report.getUserId();
        Long questionnaireId = report.getQuestionnaireId();
        lqw.eq(QuestionnaireReport::getUserId, userId);
        lqw.eq(QuestionnaireReport::getQuestionnaireId, questionnaireId);
        QuestionnaireReport questionnaireReport = questionnaireReportMapper.selectOne(lqw);
        if (questionnaireReport != null) {
            Long reportId = questionnaireReport.getId();
            report.setId(reportId);
            BeanUtils.copyProperties(report, questionnaireReport);
            questionnaireReportMapper.updateById(report);
        } else {
            questionnaireReportMapper.insert(report);
        }
        return report.getId();
    }

    /**
     * 根据id查询报告
     * @param reportId
     * @return
     */
    @Override
    public QuestionnaireReport findReport(Long reportId) {
        return questionnaireReportMapper.selectById(reportId);
    }

    /**
     * 查询和我相似的用户id集合
     * @param maxValue
     * @param questionnaireId
     * @return
     */
    @Override
    public List<Long> findSimilarUser(String maxValue, Long questionnaireId) {
        List<Long> userIds = new ArrayList<>();
        LambdaQueryWrapper<QuestionnaireReport> lqw = new LambdaQueryWrapper<>();
        lqw.eq(QuestionnaireReport::getMaxValue, maxValue);
        lqw.eq(QuestionnaireReport::getQuestionnaireId, questionnaireId);
        List<QuestionnaireReport> reports = questionnaireReportMapper.selectList(lqw);
        if (!CollUtil.isEmpty(reports)) {
            userIds = CollUtil.getFieldValues(reports, "userId", Long.class);
        }
        return userIds;
    }
}
